package cn.tedu.ivos.application.service;

import cn.tedu.ivos.application.pojo.dto.ApplicationQueryDTO;
import cn.tedu.ivos.application.pojo.dto.ApplicationSaveParamDTO;
import cn.tedu.ivos.application.pojo.entity.Application;
import cn.tedu.ivos.application.pojo.vo.ApplicationVO;
import cn.tedu.ivos.audit.pojo.vo.AuditVO;
import cn.tedu.ivos.base.enums.ApplicationStatusEnum;
import cn.tedu.ivos.user.pojo.vo.UserVO;
import cn.tedu.ivos.vehicle.pojo.entity.Vehicle;

import java.util.ArrayList;
import java.util.List;
import java.util.StringJoiner;

public interface ApplicationService {
    /**
     * 保存一个application申请对象
     * @param saveParams
     * @return
     */
    void saveApplication(ApplicationSaveParamDTO saveParams);

    /**
     * 根据条件appQueryDTO查询: 申请单列表
     * @param appQueryDTO
     * @return
     */
    List<ApplicationVO> selectApplications(ApplicationQueryDTO appQueryDTO);

    /**
     *  根据id取消申请单
     *  1.用applicationMapper更新申请单状态 和修改时间
     *  2.同时还要用auditMapper删除所有的对应的审批数据
     * @param id
     */
    void cancelApp(Long id);

    void distribute(Long applicationId, Long vehicleId);

    void back(Long applicationId, Long vehicleId);

    /* 为申请单VO补全审批人信息,此方法并不会产生额外的申请单VO!
     * List<Long> auditUserIdList; //[106,103]
     * String auditUsernameList; //"moly,tom"
     */
    void assignAuditUserList(ApplicationVO applicationVO);
}
